#pragma once
#include <SDL2/SDL_timer.h>

namespace engine
{
    namespace core
    {
        class Time 
        {
        public:
            Time();
            ~Time();
            Time(const Time&) = delete;
            Time& operator=(const Time&) = delete;
            Time(Time&&) = delete;
            Time& operator=(Time&&) = delete;
        public:
            void update();                                                //更新时间
            float getDeltaTime() const;                            //获取上一帧的时间差
			float getUnscaledDeltaTime() const;             //获取未缩放的上一帧时间差
			float getTimeScale() const;                            //获取时间缩放比例
			void setTimeScale(float scale);                       //设置时间缩放比例
			float getTargetFPS() const;                            //获取当前帧率
			void setTargetFPS(int fps);                            //设置目标帧率
			void limitFrameRate(float current_delta_time);                                  //限制帧率
        private:
			Uint64 m_lastTime;                                        //上一次更新时间
			Uint64 m_frame_start;                                   //当前帧开始时间
			double m_deltaTime;                                    //上一帧的时间差
			double m_timeScale = 1.0;                           //时间缩放比例
            int m_target_fps;                                           //帧率
			double m_target_frame_time;                      //目标帧时间
        };
    } // namespace core  
} // namespace engine